golang的ping检测网络实现 您所在的位置:网站首页 上位机CMD ping 服务器 延迟5ms如果降低 golang的ping检测网络实现

golang的ping检测网络实现

2023-07-28 10:32| 来源: 网络整理| 查看: 265

golang ping 服务器,可以用系统调用也可以用go内置的库。

系统调用 func NetWorkStatus() bool { cmd := exec.Command("ping", "www.google.com", "-c", "4", "-W", "5") fmt.Println("NetWorkStatus Start:", time.Now().Unix()) err := cmd.Run() fmt.Println("NetWorkStatus End :", time.Now().Unix()) if err != nil { fmt.Println(err.Error()) return false } else { fmt.Println("Net Status , OK") } return true } 使用 ICMP Ping

借用第三方的库 https://github.com/tatsushid/go-fastping 48

go-fastping 例子:

p := fastping.NewPinger() ra, err := net.ResolveIPAddr("ip4:icmp", os.Args[1]) if err != nil { fmt.Println(err) os.Exit(1) } p.AddIPAddr(ra) p.OnRecv = func(addr *net.IPAddr, rtt time.Duration) { fmt.Printf("IP Addr: %s receive, RTT: %v\n", addr.String(), rtt) } p.OnIdle = func() { fmt.Println("finish") } err = p.Run() if err != nil { fmt.Println(err) }

还有一个库使用也很方便 go-ping https://github.com/sparrc/go-ping 71

go-ping 使用例子:

pinger, err := ping.NewPinger("www.google.com") if err != nil { panic(err) } pinger.Count = 3 pinger.Run() // blocks until finished stats := pinger.Statistics() // get send/receive/rtt stats

不过上面两个例子都用到 ICMP,这需要以管理员身份运行。

如果只是想检查服务器的某个端口是否能连上,可以用下面的方式,速度更快

func CheckServer(){ timeout := time.Duration(5 * time.Second) t1 := time.Now() _, err := net.DialTimeout("tcp","www.google.com:443", timeout) fmt.Println("waist time :", time.Now().Sub(t1)) if err != nil { fmt.Println("Site unreachable, error: ", err) return } fmt.Println("tcp server is ok") }

用http.Client 速度稍慢

func CheckServerHttp() { timeout := time.Duration(5 * time.Second) client := http.Client{ Timeout: timeout, } t1 := time.Now() resp, err := client.Get("https://www.google.com") fmt.Println("waist time :", time.Now().Sub(t1)) if err != nil { fmt.Println("client.Get, error: ", err) return } defer resp.Body.Close() fmt.Println(resp.Status) }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有